const http = require('http');
const fs = require('fs');

http.createServer((req, res) => {
    getTitles(res);
}).listen(8000, '127.0.0.1');

/**
 * 读取标题文档
 * @param {http.ServerResponse} res
 */
function getTitles(res) {
    fs.readFile('./titles.json', (err, data) => {
        if (err) {
            handleError(err, res);
        } else {
            getTemplate(JSON.parse(data.toString()), res);
        }
    });
}

/**
 *
 * @param {string[]} titles
 * @param {http.ServerResponse} res
 */
function getTemplate(titles, res) {
    fs.readFile('./template.html', (err, data) => {
        if (err) {
            handleError(err, res);
        } else {
            formatHtml(titles, data.toString(), res);
        }
    });
}

/**
 *
 * @param {string[]} titles
 * @param {string} tmpl
 * @param {http.ServerResponse} res
 */
function formatHtml(titles, tmpl, res) {
    const html = tmpl.replace('%', titles.join('</li><li>'));
    res.writeHead(200, { 'Content-Type': 'text/html' });
    res.end(html);
}

/**
 * 处理服务器报错
 * @param {NodeJS.ErrnoException} err - 错误信息
 * @param {http.ServerResponse} res - 服务器响应数据流
 */
function handleError(err, res) {
    console.error(err);
    res.end('Server Error');
}
